package ctx;


import java.util.ArrayList;
import java.util.List;


import service_metier.Utilitaires;


import model.Activite;
import model.Personne;
import model.Video;


public class ContexteUtilisateur {
	
	private UserMenu userMenu;
	
	//Attributs regroupant Films et Personnes pour l'utilisateur courant
	
	private List<Video> listeAllFilm;
	private List<Personne> listeAllPersonne;
	private List<String> listeRecherchePersonne;
	private List<String> listeRechercheVideo;

	//Attributs pour la gestion des Films sélectionnés par l'Utilisateur
	
	private Video videoSelect;		
	private List<Video> listeVideo = null;
	private int sizeListeVideo = 0;
	private int indexFilmModif = 0;
	
	//Attributs pour la gestion des Personnes sélectionnées par l'Utilisateur
	
	private List<Personne> listePersonne = null;
	private Personne personneSelect;
	private int sizeListePersonne = 0;
	private int indexPersonneModif = 0;
	
	//Attributs pour l'affichage
	
	private boolean watchingListeFilm;
	private boolean watchingDetailFilm;
	private boolean watchingModifFilm;
	private boolean watchingAjouterFilm;
	
	private boolean watchingListePersonne;
	private boolean watchingDetailPersonne;
	private boolean watchingModifPersonne;
	private boolean watchingAjouterPersonne;
	
		//Constructeur
	
		public ContexteUtilisateur() {
			listeRecherchePersonne = new ArrayList<String>();
			listeRechercheVideo = new ArrayList<String>();
			listeAllFilm = Utilitaires.exempleListeVideo();
			updateListePersonne();
			
			for (Video v : listeAllFilm){
				listeRechercheVideo.add(v.getTitre());
				
			}
			
			for (Personne p : listeAllPersonne){
				listeRecherchePersonne.add(p.getPrenom() +" "+p.getNom());
			}
			sizeListeVideo = listeAllFilm.size();
			sizeListePersonne = listeAllPersonne.size();
		}
		
		//Mise à jour la liste des Personnes suite à des changements dans la liste des Films
		public void updateListePersonne(){
			listeAllPersonne = new ArrayList<Personne>();
			for(Video v : listeAllFilm){
				for(Activite a :v.getListeActivite()){
					for(Personne p : a.getListePersonne()){
						
						if(listeAllPersonne.isEmpty()){
							listeAllPersonne.add(p);
						}else{
							
							if(Utilitaires.indexOf(p,listeAllPersonne)==(-1)) listeAllPersonne.add(p);
						}
						}
					}
				}
			updateListeRecherchePersonne();
		
		}
		
		//Mise à jour de la liste de Recherche des Personnes
		public void updateListeRecherchePersonne(){
			listeRecherchePersonne = new ArrayList<String>();
						
			for (Personne p : listeAllPersonne){
				listeRecherchePersonne.add(p.getPrenom() +" "+p.getNom() );				
			}
		}
		//Mise à jour de la liste de Recherche des Films
		public void updateListeRechercheVideo(){
			listeRechercheVideo = new ArrayList<String>();
			for (Video v : listeAllFilm){
				listeRechercheVideo.add(v.getTitre());
			}
			
		}
		
		//Getteurs Setteurs
		
		public List<Video> getListeVideo() {
			//userMenu.afficherMenu(false);
			return listeVideo;
		}

		
		public Video getVideoSelect() {
			return videoSelect;
		}


		public void setVideoSelect(Video videoSelect) {
			this.videoSelect = videoSelect;
		}
		public void setListeVideo(List<Video> listeVideo) {
			this.listeVideo = listeVideo;
		}
		
		public UserMenu getUserMenu() {
			return userMenu;
		}
		
		public void setUserMenu(UserMenu userMenu) {
			this.userMenu = userMenu;
		}


		
		public void setListePersonne(List<Personne> listePersonne) {
			this.listePersonne = listePersonne;
		}


		public List<Personne> getListePersonne() {
			return listePersonne;
		}


		public void setPersonneSelect(Personne personneSelect) {
			this.personneSelect = personneSelect;
		}


		public Personne getPersonneSelect() {
			return personneSelect;
		}


		public void setSizeListeVideo(int sizeListeVideo) {
			this.sizeListeVideo = sizeListeVideo;
		}


		public int getSizeListeVideo() {
			return listeAllFilm.size();
		}


		public void setSizeListePersonne(int sizeListePersonne) {
			this.sizeListePersonne = sizeListePersonne;
		}


		public int getSizeListePersonne() {
			return listeAllPersonne.size();
		}


		public void setIndexFilmModif(int indexFilmModif) {
			this.indexFilmModif = indexFilmModif;
		}


		public int getIndexFilmModif() {
			return indexFilmModif;
		}


		public void setListeAllFilm(List<Video> listeAllFilm) {
			this.listeAllFilm = listeAllFilm;
		}


		public List<Video> getListeAllFilm() {
			return listeAllFilm;
		}
		public void setListeAllPersonne(List<Personne> listeAllPersonne) {
			this.listeAllPersonne = listeAllPersonne;
		}
		public List<Personne> getListeAllPersonne() {
			return listeAllPersonne;
		}
		public void setListeRecherche(List<String> listeRecherchePer) {
			this.listeRecherchePersonne = listeRecherchePer;
		}
		public List<String> getListeRecherchePersonne() {
			return listeRecherchePersonne;
		}
		
		public List<String> getListeRechercheVideo() {
			return listeRechercheVideo;
		}
		
		public void setListeRechercheVideo(List<String> listeRechercheVideo) {
			this.listeRechercheVideo = listeRechercheVideo;
		}
		
		public List<String> listeRechercheVideo() {
			return listeRechercheVideo;
		}
		

		public void setIndexPersonneModif(int indexPersonneModif) {
			this.indexPersonneModif = indexPersonneModif;
		}

		public int getIndexPersonneModif() {
			return indexPersonneModif;
		}	
		
		public void setWatchingAjouterFilm(boolean watchingAjouterFilm) {
			this.watchingAjouterFilm = watchingAjouterFilm;
		}

		public boolean isWatchingAjouterFilm() {
			return watchingModifFilm && !watchingListeFilm;
		}

		public void setWatchingAjouterPersonne(boolean watchingAjouterPersonne) {
			this.watchingAjouterPersonne = watchingAjouterPersonne;
		}

		public boolean isWatchingAjouterPersonne() {
			return watchingModifPersonne && !watchingListePersonne;
		}
		
		public void setWatchingListeFilm(boolean watchingListeFilm) {
			this.watchingListeFilm = watchingListeFilm;
		}


		public boolean isWatchingListeFilm() {
			return watchingListeFilm;
		}


		public void setWatchingListePersonne(boolean watchingListePersonne) {
			this.watchingListePersonne = watchingListePersonne;
		}


		public boolean isWatchingListePersonne() {
			return watchingListePersonne;
		}
		
		public void setWatchingDetailFilm(boolean watchingDetailFilm) {
			this.watchingDetailFilm = watchingDetailFilm;
		}


		public boolean isWatchingDetailFilm() {
			return watchingDetailFilm;
		}


		public void setWatchingDetailPersonne(boolean watchingDetailPersonne) {
			this.watchingDetailPersonne = watchingDetailPersonne;
		}


		public boolean isWatchingDetailPersonne() {
			return watchingDetailPersonne;
		}


		public void setWatchingModifFilm(boolean watchingModifFilm) {
			this.watchingModifFilm = watchingModifFilm;
		}


		public boolean isWatchingModifFilm() {
			return watchingModifFilm;
		}


		public void setWatchingModifPersonne(boolean watchingModifPersonne) {
			this.watchingModifPersonne = watchingModifPersonne;
		}


		public boolean isWatchingModifPersonne() {
			return watchingModifPersonne;
		}

		
		
}

